﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using RamaSoft.Common;
using ComponentFactory.Krypton.Toolkit;

namespace RamaSoft.CtlPatrim
{
    public partial class Cálculo : KryptonForm
    {
        Database myDBase;
        DateTime últData;

        public Cálculo(Database myDBase)
        {
            InitializeComponent();
            this.myDBase = myDBase;
        }

        private void Form_Load(object sender, EventArgs e)
        {
            Depreçia regDepr = new Depreçia(myDBase);
            int dbRet = regDepr.Máxima();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft\n"
                    + "referência: " + this.Name + " LoadÚltima\n" + regDepr.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            últData = regDepr.Data;
            titÚltima.Text = últData.ToString("dd MMMM /yyyy"); 
        }

        private void cmdExec_Click(object sender, EventArgs e)
        {
            janÉpoca.Enabled = false;
            cmdExec.Visible = false;
            janExec.Visible = true;
            this.Refresh();
            int tico = 0;
            Bens rolBens = new Bens(myDBase);
            int dbRet = rolBens.Lista();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft\n"
                    + "referência: " + this.Name + " ExecLista\n" + rolBens.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            for (int xx = 0; xx < rolBens.Items.Count; xx++)
            {
                tico = tico + 1;
                if (tico >= 100)
                {
                    tico = 0;
                    execBar.Value = execBar.Value + 5;
                    if (execBar.Value >= 100) execBar.Value = 0;
                }
                Depreçia regDepr = new Depreçia(myDBase);
                regDepr.Código = rolBens.Items[xx].Código; 
                dbRet = regDepr.Última();
                if (dbRet != 0)
                {
                    MessageBox.Show("Favor avisar a RamaSoft\n"
                        + "referência: " + this.Name + " ExecÚltima\n" + regDepr.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                DateTime época = regDepr.Data.AddYears(1);
                double queFator = 0.10;

                if (época.Year < 1950)
                {
                    época = rolBens.Items[xx].Data.AddYears(1);
                    regDepr.ValAnter = 0;
                    regDepr.Acumo = 0;
                }
                while (época <= DateTime.Today)   
                {
                    if (regDepr.Acumo == 100) break;
                    regDepr.Data = época;
                    regDepr.Fator = queFator * 100;
                    regDepr.Acumo = regDepr.Acumo + regDepr.Fator;
                    if (regDepr.Acumo >= 100)
                    {
                        regDepr.Acumo = 100;
                        regDepr.Depreço = rolBens.Items[xx].Valor - regDepr.ValAnter;
                    }
                    else regDepr.Depreço = rolBens.Items[xx].Valor * queFator;
                    regDepr.ValAtual = regDepr.ValAnter + regDepr.Depreço;
                    dbRet = regDepr.Insert();
                    if (dbRet != 0)
                    {
                        MessageBox.Show("Favor avisar a RamaSoft\n"
                            + "referência: " + this.Name + " ExecNovo\n" + regDepr.MsgErro,
                            "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    época = época.AddYears(1);
                    regDepr.ValAnter = regDepr.ValAtual;
                }
            }
            janExec.Visible = false;
            infoOK.Top = 175;
            infoOK.Visible = true;
            Pulso.Enabled = true;
        }

        private void cmdVoltar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Pulso_Tick(object sender, EventArgs e)
        {
            Pulso.Enabled = false;
            this.Close();
        }
    }
}
